Docker Registry

Docker Registry作为Docker的核心组件之一负责镜像内容的存储与分发,客户端的docker pull以及push命令都将直接与registry进行交互,最初版本的registry由Python实现,由于设计初期在安全性,性能以及API的设计上有着诸多的缺陷,该版本在0.9之后停止了开发,由新的项目distribution(新的docker register被称为Distribution)来重新设计并开发下一代registry,新的项目由go 语言开发,所有的 API,底层存储方式,系统架构都进行了全面的重新设计已解决上一代registry中存在的问题,2016年4月份rgistry 2.0正式发布,docker 1.6版本开始支持registry 2.0,而八月份随着docker 1.8发布,docker hub正式启用2.1版本registry全面替代之前版本registry,新版registry对镜像存储格式进行了重新设计并和旧版不兼容,docker 1.5和之前的版本无法读取2.0的镜像,另外,Registry2.4版本之后支持了回收站机制,也就是可以删除镜像了,在2.4版本之前是无法支持删除镜像的,所以如果你要使用最好是大于Registry 2.4版本的,目前最新版本为2.7.x

官方文档地址: https://docs.docker.com/registry/

官方github地址: https://github.com/docker/distribution/

本部分将介绍通过官方提供的docker registry镜像来简单搭建一套本地私有仓库环境。

下载Docker Registry镜像

1
[root@docker01 ~]$ docker pull registry

image-20200727163336809

搭建单机仓库

创建授权使用目录

1
[root@docker01 ~]$ mkdir /docker/auth -p

创建用户

1
[root@docker01 docker]$ docker run --entrypoint htpasswd registry -Bbn kinmfer 123456 > /docker/auth/htpasswd

启动Docker Registry

1
[root@docker01 docker]$ docker run -d -p 5000:5000 --name registry1 -v /docker/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry

image-20200727171750488

测试登陆仓库

会报错如下

image-20200727172119125

添加不安全的registry

1
[root@Docker02 ~]$ vim /lib/systemd/system/docker.service

image-20200727172445326

再次登陆成功

image-20200727173540434


或者

1
2
3
4
5
6
7
修改daemon.json   
vim /etc/docker/daemon.json    
# 在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip
{"insecure-registries":["私有仓库服务器ip:5000"]}
# 5、重启docker 服务
systemctl restart docker
docker start registry

上传镜像

1
2
[root@Docker02 ~]$ docker tag nginx:1.16.1 192.168.242.100:5000/docker02/nginx:1.16.1
[root@Docker02 ~]$ docker push 192.168.242.100:5000/docker02/nginx:1.16.1

image-20200727174213816

下载镜像

在另一台主机下载镜像,前提是也得添加不安全的registry

1
[root@docker03 ~]$ docker pull 192.168.242.100:5000/docker02/nginx:1.16.1

image-20200728081937231

Docker Hub

Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,由vmware开源,其通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中,确保数据和知识产权在公司内部网络中管控,另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

vmware官方开源服务列表地址: https://vmware.github.io/harbor/cn/
harbor官方github地址: https://github.com/vmware/harbors
harbor官方网址: https://goharbor.io/

image-20200728082753247

Habor功能官方介绍

基于角色的访问控制:用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。镜像复制:镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。

图形化用户界面:用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。

AD/LDAP支: Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。

审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。

国际化:已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来

AD/LDAP支:Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。

审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。

国际化:已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。

RESTfulAPI︰提供给管理员对于Harbor更多的操控,使得与其它管理软件集成变得更容易。

部署简单:提供在线和离线两种安装工具,也可以安装到vSphere平台(OVA方式)虚拟设备。

1
2
3
4
5
6
7
8
9
10
nginx: harbor的一个反向代理组件,代理registry、ui、token等服务。这个代理会转发harbor web和 docker client的各种请求到后端服务上。
harbor-adminserver: harbor系统管理接口,可以修改系统配置以及获取系统信息。
harbor-db:存储项目的元数据、用户、规则、复制策略等信息。
harbor-jobservice: harbor里面主要是为了镜像仓库之前同步使用的。
harbor-log:收集其他harbor的日志信息。
harbor-ui:一个用户界面模块,用来管理registry。
registry:存储docker images的服务,并且提供 pull/push服务。
redis:存储缓存信息
webhook:当registry中的image状态发生变化的时候去记录更新日志、复制等操作。
token service:在 docker client进行pull/push 的时候负责token 的发放。

安装Harbor

下载地址:https://github.com/vmware/harbor/releases/
安装文档:
https://github.com/vmware/harbor/blob/master/docs/installation_guide.md/

前提得安装Docker

下载离线安装完整包

1
2
[root@docker03 ~]$ cd /usr/loacl/src
[root@docker03 ~]$ wget https://github.com/goharbor/harbor/releases/download/v1.10.4/harbor-offline-installer-v1.10.4.tgz

下载在线安装包

1
2
[root@docker03 ~]$ cd /usr/loacl/src
[root@docker03 ~]$ wget https://github.com/goharbor/harbor/releases/download/v1.10.4/harbor-online-installer-v1.10.4.tgz

配置Harbor

解压并配置habor.cfg

1
2
3
4
5
[root@docker03 src]$ tar xf harbor-offline-installer-v1.10.4_2.tgz
[root@docker03 src]$ dnf install python3-pip -y
[root@docker03 harbor]$ docker-compose --version
docker-compose version 1.26.2, build unknown
[root@docker03 harbor]$ ./install.sh

官方方式启动Harbor

1
2
3
[root@docker03 src]$ dnf install python3-pip -y
[root@docker03 src]$ pip3 install docker-compose
[root@docker03 src]$ ./install.sh
1
2
3
4
5
[root@docker03 harbor]$ docker-compose stop
[root@docker03 harbor]$ docker-compose start
[root@docker03 harbor]$ docker-compose pause
[root@docker03 harbor]$ docker-compose unpause
[root@docker03 harbor]$ docker-compose restart

image-20200728093447342

image-20200728093528709

image-20200728094646777

image-20200728094701641

image-20200728094739325